# This is a BitKeeper generated patch for the following project: # Project Name: Linux kernel tree # This patch format is intended for GNU patch command version 2.5 or higher. # This patch includes the following deltas: # ChangeSet 1.1138 -> 1.1139 # mm/memory.c 1.126 -> 1.127 # # The following is the BitKeeper ChangeSet Log # -------------------------------------------- # 03/06/13 roland@redhat.com 1.1139 # [PATCH] make FIXMAP user page reading more portable # # This patch vs 2.5.70 works fine for me on x86. include/asm-x86_64/fixmap.h # needs the macros added for its vsyscall page too. # -------------------------------------------- # diff -Nru a/mm/memory.c b/mm/memory.c --- a/mm/memory.c Sun Jun 15 00:37:47 2003 +++ b/mm/memory.c Sun Jun 15 00:37:47 2003 @@ -691,15 +691,16 @@ vma = find_extend_vma(mm, start); -#ifdef FIXADDR_START - if (!vma && start >= FIXADDR_START && start < FIXADDR_TOP) { +#ifdef FIXADDR_USER_START + if (!vma && + start >= FIXADDR_USER_START && start < FIXADDR_USER_END) { static struct vm_area_struct fixmap_vma = { /* Catch users - if there are any valid ones, we can make this be "&init_mm" or something. */ .vm_mm = NULL, - .vm_start = FIXADDR_START, - .vm_end = FIXADDR_TOP, + .vm_start = FIXADDR_USER_START, + .vm_end = FIXADDR_USER_END, .vm_page_prot = PAGE_READONLY, .vm_flags = VM_READ | VM_EXEC, }; @@ -707,6 +708,8 @@ pgd_t *pgd; pmd_t *pmd; pte_t *pte; + if (write) /* user fixmap pages are read-only */ + return i ? : -EFAULT; pgd = pgd_offset_k(pg); if (!pgd) return i ? : -EFAULT; @@ -714,8 +717,7 @@ if (!pmd) return i ? : -EFAULT; pte = pte_offset_kernel(pmd, pg); - if (!pte || !pte_present(*pte) || !pte_user(*pte) || - !(write ? pte_write(*pte) : pte_read(*pte))) + if (!pte || !pte_present(*pte)) return i ? : -EFAULT; if (pages) { pages[i] = pte_page(*pte);